'use strict';

/**
 * 用户反馈提交云函数
 * 处理用户反馈信息的提交和存储
 */
exports.main = async (event, context) => {
  console.log('feedbackSubmit云函数被调用');
  console.log('接收到的参数:', event);
  
  try {
    // 获取数据库引用
    const db = uniCloud.database();
    const collection = db.collection('feedback');
    
    // 获取客户端信息
    let clientInfo = {};
    try {
      clientInfo = context.getClientInfo();
    } catch (clientError) {
      console.warn('获取客户端信息失败:', clientError);
      clientInfo = {
        clientIP: 'unknown',
        userAgent: 'unknown',
        source: 'unknown'
      };
    }
    
    // 构建反馈数据
    const feedbackData = {
      // 用户输入的反馈信息
      name: event.name || '',
      contact: event.contact || '',
      type: event.type || '',
      description: event.description || '',
      images: event.images || [],
      
      // 系统信息
      clientIP: clientInfo.clientIP,
      userAgent: clientInfo.userAgent,
      source: clientInfo.source,
      
      // 时间戳
      createTime: new Date().getTime(),
      createDate: new Date(),
      
      // 处理状态
      status: 'pending', // pending: 待处理, processing: 处理中, resolved: 已解决, closed: 已关闭
      priority: 'normal', // low: 低, normal: 普通, high: 高, urgent: 紧急
      
      // 管理员回复（初始为空）
      adminReply: '',
      replyTime: null,
      
      // 标签（便于分类管理）
      tags: [],
      
      // 其他字段
      isDeleted: false,
      version: '1.0'
    };
    
    // 数据验证
    if (!feedbackData.name.trim()) {
      return {
        code: 400,
        message: '姓名不能为空',
        data: null
      };
    }
    
    if (!feedbackData.contact.trim()) {
      return {
        code: 400,
        message: '联系方式不能为空',
        data: null
      };
    }
    
    if (!feedbackData.description.trim()) {
      return {
        code: 400,
        message: '反馈描述不能为空',
        data: null
      };
    }
    
    // 联系方式格式验证（简单的手机号或邮箱验证）
    const phoneRegex = /^1[3-9]\d{9}$/;
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    
    if (!phoneRegex.test(feedbackData.contact) && !emailRegex.test(feedbackData.contact)) {
      return {
        code: 400,
        message: '请输入正确的手机号或邮箱地址',
        data: null
      };
    }
    
    // 插入数据到数据库
    console.log('准备插入数据库，数据:', feedbackData);
    const result = await collection.add(feedbackData);
    
    console.log('反馈数据插入成功:', result);
    
    // 返回成功结果
    return {
      code: 200,
      message: '反馈提交成功，我们会尽快处理您的意见',
      data: {
        id: result.id,
        createTime: feedbackData.createTime
      }
    };
    
  } catch (error) {
    console.error('反馈提交失败，详细错误信息:');
    console.error('错误类型:', error.constructor.name);
    console.error('错误消息:', error.message);
    console.error('错误堆栈:', error.stack);
    console.error('完整错误对象:', error);
    
    // 返回详细的错误信息用于调试
    return {
      code: 500,
      message: '服务器内部错误，请稍后重试',
      data: null,
      debug: {
        errorType: error.constructor.name,
        errorMessage: error.message,
        errorCode: error.code || 'NO_CODE'
      }
    };
  }
};
